深入理解yum工作原理 您所在的位置:网站首页 深入理解 Cache 工作原理 深入理解yum工作原理

深入理解yum工作原理

2024-05-19 07:39| 来源: 网络整理| 查看: 265

前言

在前面一篇rpm包制作描述了rpm的打包过程,这篇文章主要讲述yum的工作原理。

yum 运行原理

yum的工作需要两部分来合作,一部分是yum服务器,还有就是client的yum工具。下面分别介绍两部分工作原理。

·  yum服务器

所有要发行的rpm包都放在yum服务器上以提供别人来下载,rpm包根据kernel的版本号,cpu的版本号分别编译发布。yum服务器只要提供简单的下载就可以了,ftp或者httpd的形式都可以。yum服务器有一个最重要的环节就是整理出每个rpm包的基本信息,包括rpm包对应的版本号,conf文件,binary信息,以及很关键的依赖信息。在yum服务器上提供了createrepo工具,用于把rpm包的基本概要信息做成一张"清单",这张"清单""就是描述每个rpm包的spec文件中信息。

·  yum client端

client每次调用yum install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的配置文件,这些配置文件指定了yum服务器的地址。yum会定期去"更新"yum服务器上的rpm包"清单",然后把"清单"下载保存到yum自己的cache里面,根据/etc/yum.conf里配置(默认是在/var/cache/yum下面),每次调用yum装包的时候都会去这个cache目录下去找"清单",根据"清单"里的rpm包描述从而来确定安装包的名字,版本号,所需要的依赖包等,然后再去yum服务器下载rpm包安装。(前提是不存在rpm包的cache)

搭建yum服务器

        1. 安装工具createrepo

        $ yum installcreaterepo

         

        2. 建立repo发布目录

        $ mkdir/var/www/yum/centos/5/{i386,x86_64}

        $ mkdir/var/www/yum/centos/6/{i386,x86_64}

         

        3. 用rpmbuild生成两个rpm包,比如说下面几个包,版本号不一样,包名字不一样

        rpm_test-0.0.1-3.noarch.rpm

        rpm_test-0.0.2-3.noarch.rpm

        rpm_test2-0.0.2-3.noarch.rpm

         

        4. copy rpm包到发布目录下

        $ cp rpm_test-0.0.*/var/www/yum/centos/5/i386/

         

        5. 用createrepo生成meta信息

        $ createrepo -o/var/www/yum/centos/5/i386/ /var/www/yum/centos/5/i386

        3/3 -rpm_test-0.0.1-3.noarch.rpm

        Saving Primarymetadata

        Saving file listsmetadata

        Saving othermetadata

 

        6. 配置apache或者nginx到发布目录

        在createrepo之后会在/var/www/yum/centos/5/i386/生成下面的目录和文件

        $ tree repodata/

        repodata/

        |--filelists.xml.gz

        |-- other.xml.gz

        |-- primary.xml.gz

        `-- repomd.xml

         

        $ gunzipfilelists.xml.gz

        $ gunzipprimary.xml.gz

        filelists.xml里面记录了所有rpm包列表,版本号,配置文件等

        /usr/local/rpm_test/conf/test.conf/usr/local/rpm_test/test.py/usr/local/rpm_test/conf...

        primary.xml里面记录描述了rpm包的依赖等信息

        配置客户端

        $ vim/etc/yum.repos.d/firefoxbug.repo

         

        [firefoxbug]

        name=firefoxbug

        baseurl=http://42.120.7.71/centos/5/i386/

        enabled=1

        gpgcheck=0

        gpgkey=

         

查看本地yum cache

        默认是在/var/cache/yum下这里记录着每个repo对应的cache

        /var/cache/yum/

        |-- base

        |   |-- cachecookie

        |   |-- mirrorlist.txt

        |   |-- packages

        |   |-- primary.xml.gz

        |   |-- primary.xml.gz.sqlite

        |   `-- repomd.xml

        |-- epel

        |   |--76c4dcbfaf075e55d5876839eb11c4f33b3a2495-primary.sqlite

        |   |-- cachecookie

        |   |-- mirrorlist.txt

        |   |-- packages

        |   `-- repomd.xml

        |-- firefoxbug

        |   |-- cachecookie

        |   |-- packages

        |   |-- primary.xml.gz

        |   |--primary.xml.gz.sqlite

        |   `-- repomd.xml

        |-- timedhosts.txt

        |-- updates

        |   |-- cachecookie

        |   |-- mirrorlist.txt

        |   |-- packages

        |   |-- primary.sqlite

        |   `-- repomd.xml

        ·        查看firefoxbug这个repo,primary.xml.gz就是yum服务器上的"清单",但是这里以sqlite方式存储了,可以查看sqlite的db

        $ sqlite3primary.xml.gz.sqlite

        sqlite> .table

        conflicts  db_info   files      obsoletes  packages  provides   requires

        sqlite> select *from packages;

        1|896712eb4b4af2d61745dd30e0a6f6513043fd69|rpm_test|noarch|0.0.2|0|3|rpm_test|rpm_t            estby                             Wanghua||1406360629|1406360561|Commercial||tools|firefoxbug|rpm_test-                0.0.2-3.src.rpm|280|2402||2734|268|816|rpm_test-0.0.2-3.noarch.rpm||sha

        2|3ad546bd3ce28b0a82a1387f438f456349e20c78|rpm_test2|noarch|0.0.2|0|3|rpm_test|rpm_            testby Wanghua||1406363739|1406363674|Commercial||tools|firefoxbug|rpm_test2-    0.0.2-3.src.rpm|280|2406||2738|268|816|rpm_test2-0.0.2-3.noarch.rpm||sha

        3|19c82aa653a394ee1f7dbc7b694fbf0221bc1848|rpm_test|noarch|0.0.1|0|3|rpm_test|rpm_testby Wanghua||1406360629|1406356964|Commercial||tools|firefoxbug|rpm_test-0.0.1-3.src.rpm|280|2402||2733|268|816|rpm_test-0.0.1-3.noarch.rpm||sha

        sqlite> select *from requires;

        /bin/sh|||||1|TRUE

        python|GE|0|2.4.3||1|FALSE

        /bin/sh|||||2|TRUE

        python|GE|0|2.4.3||2|FALSE

        /bin/sh|||||3|TRUE

        python|GE|0|2.4.3||3|FALSE

        ·        每次yum装包或者卸载的时候都会来查询这个sqlite的DB,然后做出相应的操作。

        ·        清除本地yum cache

        调用sudo yum clean会把这份"清单""全都清除,下次调用yum install等操作又会重新生成。

        $ sudo yum clean

         

        /var/cache/yum/

        |-- base

        |   |-- packages

        |-- epel

        |   |-- packages

        |-- firefoxbug

        |   |-- packages

        |-- updates

        |   |-- packages

        ·        timedhosts.txt这个文件记录着所有源地址访问所需要的时间,可以查到哪些源的地址比较慢

        ·        如果/etc/yum.conf中keepcache选项是1,那么下载的rpm包都会保存到/var/cache/yum/xxx/package下

        ·        yum install package的时候怎么确定package已经安装了呢?这部分确定不是在/var/cache/yum中得到的,而是在/var/lib/rpm/下面得到。因为装包的时候会要用root去写这个文件夹下面的db。具体这块的内容就得看rpm的源码了

常用的yum源:

网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错,将yum源设置为163yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。V9zz的云主机就将yum源设置为163的yum,具体设置方法如下:

1,进入yum源配置目录cd /etc/yum.repos.d

2,备份系统自带的yum源mv CentOS-Base.repo CentOS-Base.repo.bk下载163网易的yum源:

wget http://mirrors.163.com/.help/CentOS-Base-163.repo

支持CentOS6.x版本的:

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

安装epel源:

rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm

yum update

3,更新玩yum源后,执行下边命令更新yum配置,使操作立即生效yum makecache

4,除了网易之外,国内还有其他不错的yum源,比如中科大和搜狐的,大家可以根据自己需求下载中科大的yum源:wget http://centos.ustc.edu.cn/CentOS-Base.reposohu的yum源wget http://mirrors.sohu.com/help/CentOS-Base-sohu.repo

理论上讲,这些yum源redhat系统以及fedora也是可以用 的,但是没有经过测试,需要的站长可以自己测试一下。

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有